package com.example.demo.mapper.system;

import com.example.demo.entity.system.SysFieldOption;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 字段选项数据访问层
 */
@Mapper
public interface SysFieldOptionMapper {
    
    /**
     * 根据字段ID查询选项列表
     *
     * @param fieldId 字段ID
     * @return 选项集合
     */
    List<SysFieldOption> selectOptionsByFieldId(Long fieldId);
    
    /**
     * 根据ID查询选项
     *
     * @param id 选项ID
     * @return 选项对象
     */
    SysFieldOption selectOptionById(Long id);
    
    /**
     * 根据字段ID和选项标识查询选项
     *
     * @param fieldId 字段ID
     * @param optionKey 选项标识
     * @return 选项对象
     */
    SysFieldOption selectOptionByKey(@Param("fieldId") Long fieldId, @Param("optionKey") String optionKey);
    
    /**
     * 查询选项列表
     *
     * @param option 选项信息
     * @return 选项集合
     */
    List<SysFieldOption> selectOptionList(SysFieldOption option);
    
    /**
     * 新增选项
     *
     * @param option 选项信息
     * @return 影响行数
     */
    int insertOption(SysFieldOption option);
    
    /**
     * 批量新增选项
     *
     * @param options 选项列表
     * @return 影响行数
     */
    int batchInsertOptions(List<SysFieldOption> options);
    
    /**
     * 修改选项
     *
     * @param option 选项信息
     * @return 影响行数
     */
    int updateOption(SysFieldOption option);
    
    /**
     * 修改选项状态
     *
     * @param optionId 选项ID
     * @param status 状态
     * @return 影响行数
     */
    int updateOptionStatus(@Param("optionId") Long optionId, @Param("status") Integer status);
    
    /**
     * 删除选项
     *
     * @param optionId 选项ID
     * @return 影响行数
     */
    int deleteOptionById(Long optionId);
    
    /**
     * 批量删除选项
     *
     * @param optionIds 选项ID数组
     * @return 影响行数
     */
    int deleteOptionByIds(Long[] optionIds);
    
    /**
     * 根据字段ID删除选项
     *
     * @param fieldId 字段ID
     * @return 影响行数
     */
    int deleteOptionByFieldId(Long fieldId);
    
    /**
     * 校验选项标识是否唯一
     *
     * @param fieldId 字段ID
     * @param optionKey 选项标识
     * @param optionId 选项ID
     * @return 结果
     */
    int checkOptionKeyUnique(@Param("fieldId") Long fieldId, @Param("optionKey") String optionKey, @Param("optionId") Long optionId);
} 